#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int list_data_type;

typedef struct list_node
{
	list_data_type data;
	struct list_node* next;
	struct list_node* prev;
}list_node;

list_node* list_init();

void list_print(list_node* phead);

list_node* buy_list_node(list_data_type x);

void list_destroy(list_node* phead);

void list_push_back(list_node* phead, list_data_type x);

void list_push_front(list_node* phead, list_data_type x);

void list_pop_back(list_node* phead);

void list_pop_front(list_node* phead);

list_node* list_find(list_node* phead, list_data_type x);

void list_insert(list_node* pos, list_data_type x);

void list_erase(list_node* pos);